package com.heima.article.job;

import com.heima.article.service.HotArticleService;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component//让spring管理
@Slf4j
public class ComputeHotArticleJob {
//为什么用xxl-job而不用其它的定时任务？？
    //1.XXL-JOB 提供了直观的Web界面，用于任务的管理和调度，
    // 用户可以轻松地创建、修改和监控任务，无需深入理解复杂的代码或配置。

    //2.XXL-JOB 支持分布式任务调度，轻松地在多台服务器上实现任务的分布式处理

    //3.XXL-JOB 支持任务的自动失败重试和手动重试功能，包括任务的状态监控和报警机制，能够确保任务的可靠性

    //4.XXL-JOB 提供了丰富的扩展接口，用户可以根据业务需求自定义任务逻辑

    //5.支持各种执行策略，如顺序执行、并行执行等，能够满足不同场景下的需求。

    //6.支持多种开发语言的任务执行，可以通过 RESTful API 进行调用，方便与多种系统集成。

    @Autowired
    private HotArticleService hotArticleService;

//1.查询所有频道，遍历每个频道，查询每个频道下30条分值较高的文章存到redis里，作为每个频道的热点内容

//2.按照所有的文章进行分值排序，截取前30条，然后按照分值倒序排序，最后存到redis里，作为推荐页数据

    //使用 xxl-job 框架时用来标记一个定时任务（Job）
    /**
     * 热文章分值计算调度任务
     * (查询前5天的文章数据，
     * 为每个频道缓存30条分值较高的文章存入redis
     * 缓存30条推荐数据到推荐页(不分频道))
     */
    @XxlJob("computeHotArticleJob")
    //computeHotArticleJob来自虚拟机http://192.168.200.130:8888/xxl-job-admin的xxl-job-admin中任务"热文章定时计算"的名称
    public void handle(){
        log.info("热文章分值计算调度任务开始执行...");
        hotArticleService.computeHotArticle();
        log.info("热文章分值计算调度任务结束...");
    }
}